관계형 데이터베이스 실전 입문 1장

관계형 데이터베이스 실전 입문

관계형 모델

실제 세계의 데이터를 관계라는 개념을 사용해 표현한 데이터 모델이며 릴레이션 단위로 다양한 연산을 사용해 질의를 수행하는 데이터 모델이다.

릴레이션

SQL에 있어 릴레이션에 해당하는 것은 테이블이다. 릴레이션은 제목(Heading)과 본체(Body)로 구성돼 있으며 제목은 속성(Attribute)이 n개 모인 집합이며, 속성은 이름과 데이터 형으로 되어 있다. 본체는 속성 값의 집합인 행(tuple)의 집합이다 튜플에 포함된 속성 값은 이름과 데이터 형이 heading에서 지정한 것과 일치해야한다.

릴레이션이란 튜플의 집합이고, 튜플은 모두 같은 n개의 속성값의 집합으로, 데이터 구성이 서로 같다.

튜플은 행, 속성을 열이라고 한다.

집합

수학에서 사용되는 개념으로 모임을 포현하는 개념이다. 집합에 포함된 각 물건을 요소나 원소(Element).

집합의 조건

  1. 어떤 요소가 집합에 포함돼 있는지 불확정한 요소 없이 판정할 수 있어야 한다.(예 : null은 알수 없는 값이란 표식)
  2. 집합의 요소가 중복돼서는 안된다.

관계형 모델은 집합론에 기린하는 데이터 모델이며, NULL값을 포함할 수 없다.

릴레이션의 연산

데이터를 릴레이션이라고 표현한다면 그에 대한 연산은 쿼리(질의)다. 관계형 모델은 릴레이션 단위로 다양한 연산을 사용해 질의를 수행하는 데이터 모델이다. 릴레이션은 튜플의 집합이며 릴레이션의 연산도 집합론을 바탕으로 한다.

대표적인 릴레이션 연산

  1. 제한(Restrict)

    • 어떤 릴레이션들 중에 특정 조건에 맞는 튜플을 포함한 릴레이션을 반환한다.
    • 헤딩의 변경이 없이 동일하며, SQL에서 where 조건에 해당한다.
  2. 프로젝션(projection)

    • 어떤 릴레이션에서 특정 속성만 포함하는 릴레이션을 반환한다.
    • 헤딩이 변경되며 중복이 발생할 경우 같은 튜플로 간주한다.
  3. 확장(extend)

    • 프로젝션과 반대로 속성을 늘리는 동작이다. 새로운 속성값은 기존의 속성값을 이용해 계산한다.
    • 헤딩이 변경된다.
  4. 속성명 변경(rename)

    • 단순히 속성의 이름을 변경하는 동작이다.
  5. 합집합(Union)

    • 두 개의 릴레이션에 포함된 모든 튜플로 구성된 릴레이션(합집합)을 반환한다.
    • 두개의 릴레이션에 공통된 속성값이 포함됐다면 합집합은 중복 값이 제거된 상태가 된다.
    • 두개의 릴레이션의 헤딩이 일치해야한다.
  6. 교집합(intersect)

    • 두 개의 릴레이션에 모두 포함된(공통 부분) 릴레이션을 반환한다.
    • 두개의 릴레이션의 헤딩이 일치해야한다.
  7. 차집합(Difference)

    • 두개의 릴레이션 중에 한 쪽의 릴레이션에만 포함되어 있는 튜플로 구성된 릴레이션을 반환한다.
    • 어느 쪽의 릴레이션을 기준으로 정하는지에 따라 결과가 달라진다.
    • 두개의 릴레이션의 헤딩이 일치해야한다.
  8. 곱집합(Product)

    • 두개의 릴레이션에 있는 튜플을 각각 조합한 릴레이션을 반환한다.
    • 수학으로 combination과 동일하며 릴레이션의 제목은 두 개의 릴레이션의 제목이 가진 속성을 전부 포함한다.
  9. 결합(Join)

    • 공통된 속성을 가진 두개의 릴레이션에서 속성값이 튜플끼리 조합한 릴레이션을 반환한다.
    • SQL에서는 INNER JOIN이라고 하며 관계형 모델에서 존재하는 것은 INNER JOIN 뿐이다.
    • 교집합과 곱집합은 결합의 특수한 예다.

      • 교집합은 두 개의 릴레이션에 포함되는 속성이 전부 공통인 경우이다.
      • 곱집합은 공통의 속성이 존재하지 않는 경우다.

클로저(closure)

관계형 모델에서 중요한 것은 릴레이션을 사용한 연산 결과가 릴레이션이 되는 것이다. 이와 같이 입력과 출력이 같은 데이터 구조를 가진 성질을 클러저라고 한다.

연산 결과가 같으면 결과를 다른 릴레이션과 조합해 연산할 수 있다. 릴레이션의 연산만을 이용해 복잡한 연산을 표현할 수 있다는 점이 관계형 모델의 핵심이다.

관계형 모델의 데이터 형식

데이터 형식이란 각 속성이 어떤 값을 가질 것인지를 의미한다.

데이터 형식과 변수

변수란 값을 대입하는 그릇이며 변수의 내용을 프로그램이 실행되면서 끊임없이 변한다.

도메인

변수에 대입할 수 있는 값은 무한정한 값이 아니며, 사용할 수 있는 범위가 한정돼 있다. 컴퓨터가 표현할 수 있는 데이터는 변경할 수 있는 한계가 있다. 즉 데이터 형식은 그 변수에 대입할 수 있는 값의 유한집합이다.

관계형 모델에서 데이터 형식은 도메인이라고 한다. 값은 그 집합의 요소 하나하나이고 변수는 어떤 시점에 그 집합에서 요소를 한 개 선택한 것이다. 집합의 요소에는 변화가 없지만 변수는 변한다. 그 집합 전체를 도메인이라고 한다.

도메인이 유한집합이라는 것은 튜플이 취득할 수 있는 값은 유한집합의 곱집합으로 나타낼 수 있다.

관계형 모델은 릴레이션을 구성하는 제목, 본체, 튜플뿐 아니라 속성의 데이터 형식 조차 집합으로 되어져 있다.

SELECT

SELECT는 SQL에서 데이터를 조회하는데 사용하는 유일한 명령이다. 질의 기능은 전부 SELECT이다.

SELECT 컬럼의 목록
FROM 테이블의 목록
WHERE 검색 조건

위의 세 항목 모두 대수연산에 해당한다.

연산이 평가되는 순서

  1. 테이블의 목록(곱집합)
  2. 검색조건 (제한)
  3. 컬럼의 목록(프로젝션)

RDB의 SELECT문에서 항목들은 평가되는 순서가 옵티마이저로 인해 실행 순서가 바뀌게 된다. 그렇기 때문에 위의 순서는 논리적인 의미이다.

INSERT

관계형 모델에는 릴레이션 자체가 값이기 때문에 갱신이라는 개념이 존재하지 않다. 하지만 SQL에서 테이블은 값과 변수라는 양쪽의 역할을 하기 때문에 insert할 경우 릴레이션이 바뀌는 것처럼 보인다.

관계형 모델에서 릴레이션을 저장하는 변수는 Relvar(Relation Variable, 관계변수)라고 하며, SQL에서 테이블의 갱신 처리는 Relvar의 역할로 테이블에 할당된 릴레이션의 값을 변경하는 것이다.

INSERT는 Relvar의 값을 해당 릴레이션에 새롭게 INSERT할 튜플을 추가하고 릴레이션과 바꾸는 작업에 해당한다.

R:= R ∪ {T}

DELETE

차집합이라고 할 수 있으며 관계형 모델로 표현하면 전체 릴레이션(=Relvar에 대입되는 값)에서 WHERE절의 조건에 해당하는 튜플의 집합(부분집합)이 되고 두 릴레이션의 차집합을 Relvar에 대입하는 것과 같다.

R:= R - {T}

UPDATE

즉 값 자체는 갱신할 수 없으므로 튜플의 값을 바꾸는 것은 관계형 모델에서 불가능하다. 그렇기 때문에 아래와 같이 동작한다.

  1. 전체 릴레이션에서 where 조건에 맞는 튜플로 이뤄진 릴레이션의 차집합을 구한다.
  2. 1의 결과인 릴레이션(ㅈwhere절의 조건에 맞는 튜플로 구성된 릴레이션)에 수정을 가한 릴레이션과의 합집합을 구한다.
  3. 2의 합집합을 Relvar에 대입한다.

R:=(R-{T1})∪{T2}

SQL과 관계형 모델의 차이

SQL은 테이블은 원래 집합이 아니므로 같은 행이 있을 수 있다. SQL을 관계형 모델에 맞게 사용하려면 테이블을 집합처럼 사용해야 한다.

집합은 요소 사이의 순서가 없어서 집합으로 정의된 릴레이션의 본체, 튜플, 제목에 포함된 요소에도 순서가 없다. 하지만 SQL에는 순서가 있다. 그렇기 때문에 관계형 모델에 따라 SQL을 사용하려면 행이나 컬럼의 위치를 고려한 쿼리를 작성하면 안된다. a 릴레이션은 값이므로 갱신할 수 없지만(변수는 값을 담는 그릇이므로 변경가능), 테이블은 값과 변수의 기능을 둘다 한다.

릴레이션은 갱신이 없기 때문에 트랜잭션의 ACID 특성과 아무 관게가 없다. 트랜잭션은 값과 변수 두가지 성질을 겸하는 테이블이라는 개념이 있고 SQL이기 때문에 의미가 있는 개념이다.

집합에는 NULL이라는 개념이 없고, SQL에서의 NULL은 값이 존재하지 않거나 알 수 없다는 의미의 특별한 기호이지 값이 아니기 때문에 null을 집합에 포함할 수 없다.

알아봐야 할것들

  1. 개념적 속성과 물리적 속성의 차이.
  2. 커서란 무엇인가 ?
  3. 스토어드 프로시저란

Written by@Zero1
This blog is for that I organize what I study and my thinking, feeling and experience.

GitHub